package main

import (
	"fmt"
	"p2p-server/pkg/database"
	"p2p-server/pkg/util"
)

func main() {
	// 初始化数据库连接
	if err := database.InitDB(); err != nil {
		fmt.Printf("数据库连接失败: %v\n", err)
		return
	}
	defer database.CloseDB()

	// 测试用例
	testCases := []struct {
		name       string
		roomID     string
		userID     uint64
		isCustomer bool
	}{
		{
			name:       "测试1: 有效的客户会话",
			roomID:     "test_room_1", // 请替换为实际存在的房间ID
			userID:     1001,          // 请替换为实际存在的客户ID
			isCustomer: true,
		},
		{
			name:       "测试2: 有效的服务提供者会话",
			roomID:     "test_room_1", // 请替换为实际存在的房间ID
			userID:     2001,          // 请替换为实际存在的服务提供者ID
			isCustomer: false,
		},
		{
			name:       "测试3: 无效的用户ID",
			roomID:     "test_room_1", // 请替换为实际存在的房间ID
			userID:     9999,          // 不存在的用户ID
			isCustomer: true,
		},
		{
			name:       "测试4: 无效的房间ID",
			roomID:     "nonexistent_room",
			userID:     1001,
			isCustomer: true,
		},
	}

	// 执行测试
	for _, tc := range testCases {
		fmt.Printf("\n执行%s\n", tc.name)
		fmt.Printf("参数: roomID=%s, userID=%d, isCustomer=%v\n", tc.roomID, tc.userID, tc.isCustomer)

		// 查询会话信息
		session, err := database.GetVideoSessionByRoomID(tc.roomID)
		if err != nil {
			fmt.Printf("查询会话失败: %v\n", err)
			continue
		}

		if session == nil {
			fmt.Printf("会话不存在\n")
			continue
		}

		// 打印会话信息
		fmt.Printf("会话信息: ID=%s, 房间=%s, 客户=%d, 提供者=%d, 状态=%s\n",
			session.SessionID, session.RoomID, session.CustomerID, session.ProviderID, session.Status)

		// 验证会话有效性
		valid, err := database.IsValidSession(tc.roomID, tc.userID, tc.isCustomer)
		if err != nil {
			fmt.Printf("验证会话出错: %v\n", err)
			continue
		}

		if valid {
			fmt.Printf("结果: 会话有效 ✓\n")
			userType := "服务提供者"
			if tc.isCustomer {
				userType = "客户"
			}
			util.Infof("鉴权成功: %s用户 %d 进入房间 %s", userType, tc.userID, tc.roomID)
		} else {
			fmt.Printf("结果: 会话无效 ✗\n")
			userType := "服务提供者"
			if tc.isCustomer {
				userType = "客户"
			}
			util.Errorf("鉴权失败: %s用户 %d 尝试进入房间 %s", userType, tc.userID, tc.roomID)
		}
	}
}